package com.aliyun.messagemgt.domain.repository;

import com.aliyun.messagemgt.common.dto.send.MsgRecordVO;
import com.aliyun.messagemgt.dto.MessageRecord;
import com.aliyun.messagemgt.dto.msg.MessageRecordDTO;
import com.aliyun.messagemgt.dto.msg.MessageRecordQry;
import com.aliyun.messagemgt.dto.query.MsgPushResultsQuery;
import com.aliyun.messagemgt.dto.query.MyMsgQueryDTO;
import com.aliyun.messagemgt.dto.in.ApiStatisticsQuery;
import com.aliyun.messagemgt.dto.vo.*;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;

import java.time.LocalDate;
import java.util.List;

/**
 * @Description
 * @Author hzw
 * @Date 2020/12/16 16:23
 * @Version 1.0
 */
public interface MsgRecordRepository {

    /**
     * 获取推送信息
     * @param messageRecordQueryVO
     * @return
     */
    Page<MessageRecordReturnVO> selectMessageRecord(MessageRecordQueryVO messageRecordQueryVO);

    /**
     * 获取我的消息
     * @param myMsgQueryDTO
     * @return
     */
    Page<MyMsgVO> selectMyMessageRecord(MyMsgQueryDTO myMsgQueryDTO);

    /**
     * 对外接口：消息查询
     * @param msgPushResultsQuery
     * @return
     */
    Page<MsgPushResultsQueryVO> selectMsgPushResults(MsgPushResultsQuery msgPushResultsQuery);

    /**
     * 查询历史消息
     * @param historyDay
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<MessageRecord> queryMessageHistory( LocalDate historyDay, int pageNum,  int pageSize);

    /**
     * 查询DEV历史消息
     * @param historyDay
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<MessageRecord> queryDevMessageHistory( LocalDate historyDay,String sourceName, int pageNum, int pageSize);

    /**
     * 删除消息记录表数据
     * @param msgList
     * @return
     */
    int deleteMsg(List<MessageRecord> msgList);

    Long countMessageRecord(MessageRecordQueryVO messageRecordQueryVO);

    /**
     * 消息归档
     * @date 2019-09-11 10:20
     * @param
     * @return void
     */
    void messageArchive();

    /**
     * 批量插入
     *
     * @param msgRecordVos
     * @return
     */
    int batchMsgRecordInsert(List<MsgRecordVO> msgRecordVos);

    /**
     * 查询各种渠道推送记录（各渠道调用统计）
     *
     * @param apiStatisticsQuery 统计查询参数类
     * @return List
     */
    List<MsgRecordStatisticsVO> queryMsgRecordsStatistics(ApiStatisticsQuery apiStatisticsQuery);

    PageInfo<MessageRecordDTO> page(MessageRecordQry messageRecordQry);

    void updateMsgRecordStatus(MsgRecordVO msgRecordVO);

    /**
     * 获取一条消息记录，构建多条MsgRecordVO
     * @param msgId
     * @return
     */
    List<MsgRecordVO> getMsgRecordVOList(Long msgId);
}
